home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / sbin / update-catalog < prev    next >
Text File  |  2004-10-26  |  6KB  |  246 lines

  1. #!/usr/bin/perl
  2. ## ----------------------------------------------------------------------
  3. ## Debian GNU/Linux update-catalog version 0.2
  4. ## ----------------------------------------------------------------------
  5. ## Copyright (c) 2001-2004 Ardo van Rangelrooij
  6. ##
  7. ## This is free software; see the GNU General Public Licence version 2
  8. ## or later for copying conditions.  There is NO warranty.
  9. ## ----------------------------------------------------------------------
  10.  
  11. ## ----------------------------------------------------------------------
  12. use strict;
  13.  
  14. ## ----------------------------------------------------------------------
  15. $0 =~ m|[^/]+$|;
  16.  
  17. ## ----------------------------------------------------------------------
  18. use vars qw( $name );
  19. $name = $&;
  20.  
  21. ## ----------------------------------------------------------------------
  22. use vars qw( $add );
  23. use vars qw( $backup );
  24. use vars qw( $catalog );
  25. use vars qw( @data );
  26. use vars qw( $debug );
  27. use vars qw( $entry );
  28. use vars qw( $quiet );
  29. use vars qw( $remove );
  30. use vars qw( $super );
  31. use vars qw( $template );
  32. use vars qw( $type );
  33.  
  34. ## ----------------------------------------------------------------------
  35. while ( $ARGV[0] =~ m/^--/ )
  36. {
  37.     $_ = shift( @ARGV );
  38.     last if $_ eq '--';
  39.     if ( $_ eq '--add' )
  40.     {
  41.         $add = 1;
  42.     }
  43.     elsif ( $_ eq '--remove' )
  44.     {
  45.         $remove = 1;
  46.     }
  47.     elsif ( $_ eq '--quiet' )
  48.     {
  49.         $quiet = 1;
  50.     }
  51.     elsif ( $_ eq '--super' )
  52.     {
  53.         $super = 1;
  54.     }
  55.     elsif ( $_ eq '--test' )
  56.     {
  57.         $debug = 1;
  58.     }
  59.     elsif ( $_ eq '--help' )
  60.     {
  61.         &help;
  62.     exit -1;
  63.     }
  64.     elsif ( $_ eq '--version' )
  65.     {
  66.         &help;
  67.     exit -1;
  68.     }
  69.     else
  70.     {
  71.         print STDERR "$name: unknown option \`$_'\n";
  72.     &help;
  73.     exit 1;
  74.     }
  75. }
  76.  
  77. ## ----------------------------------------------------------------------
  78. if ( ! @ARGV )
  79. {
  80.     print STDERR "\n";
  81.     &help;
  82.     exit 1;
  83. }
  84.  
  85. ## ----------------------------------------------------------------------
  86. if ( $add || $remove )
  87. {
  88.     if ( $super )
  89.     {
  90.     $catalog = '/etc/sgml/catalog';
  91.     }
  92.     else
  93.     {
  94.     $catalog = shift( @ARGV );
  95.     }
  96. }
  97.  
  98. ## ----------------------------------------------------------------------
  99. if ( ! @ARGV )
  100. {
  101.     print STDERR "\n";
  102.     &help;
  103.     exit 1;
  104. }
  105.  
  106. ## ----------------------------------------------------------------------
  107. $entry = shift( @ARGV );
  108.  
  109. ## ----------------------------------------------------------------------
  110. if ( @ARGV )
  111. {
  112.     print STDERR "$name: too many arguments\n";
  113.     &help;
  114.     exit 1;
  115. }
  116.  
  117. ## ----------------------------------------------------------------------
  118. if ( $add == $remove )
  119. {
  120.     print "Huh? You have to use --add or --remove (not both).\n";
  121.     exit 1;
  122. }
  123.  
  124. ## ----------------------------------------------------------------------
  125. print STDERR "$name: test mode - catalog file will not be updated\n"
  126.     if $debug && ! $quiet;
  127.  
  128. ## ----------------------------------------------------------------------
  129. if ( $add )
  130. {
  131.     print "Adding entry $entry to catalog $catalog...\n"
  132.         unless $quiet;
  133.     
  134.     &read_catalog_without_entry;
  135.     &add_entry;
  136.     &write_catalog;
  137. }
  138. elsif ( $remove )
  139. {
  140.     print "Removing entry $entry from catalog $catalog...\n"
  141.         unless $quiet;
  142.     
  143.     &read_catalog_without_entry;
  144.     &write_catalog;
  145. }
  146.  
  147. ## ----------------------------------------------------------------------
  148. exit 0;
  149.  
  150. ## ----------------------------------------------------------------------
  151.  sub read_catalog_without_entry
  152. {
  153.     if ( -f $catalog )
  154.     {
  155.     print "Reading catalog $catalog and removing entry $entry...\n"
  156.         if $debug;
  157.     open( CATALOG, "<$catalog" )
  158.         or die "cannot open catalog $catalog for reading: $!";
  159.     while ( <CATALOG> )
  160.     {
  161.         chop;
  162.         push( @data, $_ ) unless m/$entry/;
  163.     }
  164.     close( CATALOG );
  165.     }
  166.     else
  167.     {
  168.     $type = $super ? 'super' : 'centralized';
  169.     $template = "/usr/share/sgml-base/catalog.$type";
  170.     print "Reading template $template...\n"
  171.         if $debug;
  172.     open( TEMPLATE, "<$template" )
  173.         or die "cannot open template $template for reading: $!";
  174.     while ( <TEMPLATE> )
  175.     {
  176.         chop;
  177.         s|CATALOG|$catalog| if m/CATALOG/;
  178.         push( @data, $_ );
  179.     }
  180.     close( TEMPLATE );
  181.     }
  182. }
  183.  
  184. ## ----------------------------------------------------------------------
  185. sub add_entry
  186. {
  187.     print "Appending entry $entry...\n" if $debug;
  188.     push( @data, "CATALOG $entry" );
  189. }
  190.  
  191. ## ----------------------------------------------------------------------
  192. sub write_catalog
  193. {
  194.     $backup = $catalog . '.old';
  195.     if ( not $debug )
  196.     {
  197.     if ( -f $catalog )
  198.     {
  199.         # remove old backup file
  200.         if ( -f $backup )
  201.         {
  202.         unlink( $backup )
  203.             or die "cannot remove backup copy $backup: $!";
  204.         }
  205.         rename( $catalog, $backup )
  206.         or die "cannot rename $catalog to $backup: $!";
  207.     }
  208.     open( CATALOG, ">$catalog" )
  209.         or die "cannot open catalog $catalog for writing: $!";
  210.     for ( @data ) { print CATALOG "$_\n"; };
  211.     close( CATALOG );
  212.     }
  213.     else
  214.     {
  215.     print "Writing new entry to $catalog...\n";
  216.     for ( @data ) { print "$_\n"; };
  217.     }
  218. }
  219.  
  220. ## ----------------------------------------------------------------------
  221. sub help
  222. {
  223.     print STDERR <<END;
  224. Usage:
  225.     $name <options> --add --super <centralized_catalog>
  226.     $name <options> --add <centralized_catalog> <ordinary_catalog>
  227. or
  228.     $name <options> --remove --super <centralized_catalog>
  229.     $name <options> --remove <centralized_catalog> <ordinary_catalog>
  230.  
  231. Options:
  232.     --quiet         be quiet
  233.     --test          do not modify any files, enables debugging mode
  234.     --version       display version number
  235.     --help          display this text
  236. END
  237. }
  238.  
  239. ## ----------------------------------------------------------------------
  240. sub version
  241. {
  242.     print "Debian $name version 0.2\n";
  243. }
  244.  
  245. ## ----------------------------------------------------------------------
  246.